package org.zergle.lex;

import java.io.IOException;

/**
 * 抽象的语法分析器
 * 
 * @author Johnson.Lee
 * 
 */
public abstract class AbstractParser {
	/**
	 * 词法分析器
	 */
	protected AbstractLexer lexer;
	
	/**
	 * 当前<code>Token</code>
	 */
	protected Token currToken;

	/**
	 * 基于词法分析器构造语法分析器
	 * 
	 * @param lexer
	 *            词法分析器
	 */
	public AbstractParser(AbstractLexer lexer) {
		super();
		this.lexer = lexer;
	}

	/**
	 * 根据词法分析器产生的{@link Token}进行语法分析
	 * 
	 * @return 语法分析产生的对象
	 * @throws SyntaxError
	 *             当出现语法错误时，抛出此错误
	 * @throws IOException
	 */
	public abstract Object parse() throws SyntaxError, IOException;

}
